package com.ruoyi.web.controller.job;

import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.enums.JobTypeEnum;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.entity.AppJobSignedConfig;
import com.ruoyi.system.service.AppJobSignedConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * (AppJobSignedConfig)表控制层
 *
 * @author makejava
 * @since 2023-06-25 13:51:40
 */
@Slf4j
@RestController
@RequestMapping("appJobSignedConfig")
public class AppJobSignedConfigController extends BaseController {
    @Resource
    private RedisCache redisCache;

    /**
     * 服务对象
     */
    @Resource
    private AppJobSignedConfigService appJobSignedConfigService;

    /**
     * 分页查询
     *
     * @param appJobSignedConfig 筛选条件
     * @return 查询结果
     */
    @GetMapping("list")
    public AjaxResult queryByPage(AppJobSignedConfig appJobSignedConfig) {
        List<AppJobSignedConfig> list = appJobSignedConfigService.queryAll(appJobSignedConfig);
        return AjaxResult.success(list);
    }

    /**
     * 新增数据
     *
     * @param appJobSignedConfig 实体
     * @return 新增结果
     */
    @PostMapping("nodel/config")
    public AjaxResult queryNodeConfig(@RequestBody AppJobSignedConfig appJobSignedConfig) {
        //参数校验
        if (null == appJobSignedConfig) {
            return AjaxResult.error("参数异常");
        }
        if (StringUtils.isEmpty(appJobSignedConfig.getJobType())) {
            return AjaxResult.error("未填写作业类型");
        }
        if (appJobSignedConfig.getJobType().equals("DH")
                && StringUtils.isEmpty(appJobSignedConfig.getJobGrade())) {
            return AjaxResult.error("动火作业票未选择等级");
        }

        log.info("根据作业票类型 查询签字人员信息配置 参数:{}", JSON.toJSON(appJobSignedConfig));
        List<AppJobSignedConfig> jobSignedConfigList = appJobSignedConfigService.queryNodeConfig(appJobSignedConfig);
        log.info("根据作业票类型 查询签字人员信息配置 结果:{}", JSON.toJSON(jobSignedConfigList));

        return AjaxResult.success(jobSignedConfigList);
    }

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("{id}")
    public ResponseEntity<AppJobSignedConfig> queryById(@PathVariable("id") Integer id) {
        return ResponseEntity.ok(this.appJobSignedConfigService.queryById(id));
    }

    /**
     * 新增数据
     *
     * @param appJobSignedConfig 实体
     * @return 新增结果
     */
    @PostMapping
    public ResponseEntity<AppJobSignedConfig> add(AppJobSignedConfig appJobSignedConfig) {
        return ResponseEntity.ok(this.appJobSignedConfigService.insert(appJobSignedConfig));
    }

    /**
     * 编辑数据
     *
     * @param appJobSignedConfig 实体
     * @return 编辑结果
     */
    @PutMapping
    public ResponseEntity<AppJobSignedConfig> edit(@RequestBody AppJobSignedConfig appJobSignedConfig) {
        return ResponseEntity.ok(this.appJobSignedConfigService.update(appJobSignedConfig));
    }

    /**
     * 删除数据
     *
     * @param id 主键
     * @return 删除是否成功
     */
    @DeleteMapping
    public ResponseEntity<Boolean> deleteById(Integer id) {
        return ResponseEntity.ok(this.appJobSignedConfigService.deleteById(id));
    }

    /**
     * 受限空间配置
     *
     * @return 受限空间
     */
    @PostMapping("space")
    public AjaxResult space(@RequestBody AppJobSignedConfig appJobSignedConfig) {
        if (null == appJobSignedConfig) {
            return AjaxResult.error("参数异常");
        }
        if (StringUtils.isEmpty(appJobSignedConfig.getJobType())) {
            return AjaxResult.error("未填写作业类型");
        }
        if (appJobSignedConfig.getJobType().equals("DH")
                && StringUtils.isEmpty(appJobSignedConfig.getJobGrade())) {
            return AjaxResult.error("动火作业票未选择等级");
        }
        if (appJobSignedConfig.getJobType().equals(JobTypeEnum.LIMITED_SECURITY_JOB_BILL.getCode().toString())) {
            Map<String, String> initConfinedSpaceMap = new HashMap<>();
            initConfinedSpaceMap.put("qitiData", "分体分析");
            initConfinedSpaceMap.put("qianming1", "安全措施");
            initConfinedSpaceMap.put("aqjdr", "安全交底人");
            initConfinedSpaceMap.put("yjqm2", "所在单位");
            initConfinedSpaceMap.put("yjqm3", "安保部审批意见");
            initConfinedSpaceMap.put("yjqm4", "实际进入受限空间时间");
            initConfinedSpaceMap.put("yjqm5", "完成验收");
            return AjaxResult.success(initConfinedSpaceMap);
        }
        return AjaxResult.success();
    }

    //作业票核心,请勿删除
    @PostMapping("initMap")
    public AjaxResult initMap() {
        Map<String, List<String>> map = new HashMap<>();

        List<String> array = new ArrayList<>();
        array.add("qianming1");
        array.add("zyryqz");
        map.put("6", array);

        List<String> array1 = new ArrayList<>();
        array1.add("qianming1");
        array1.add("jsjdr");
        array1.add("yjqm1");
        map.put("5", array1);

        List<String> array2 = new ArrayList<>();
        array2.add("qianming1");
        array2.add("yjqm5");
        map.put("4", array2);

        List<String> array3 = new ArrayList<>();
        array3.add("qianming1");
        array3.add("jsjdr");
        array3.add("yjqm5");
        map.put("1", array3);

        List<String> array4 = new ArrayList<>();
        array4.add("qianming1");
        array4.add("yjqm5");
        map.put("3", array4);

        redisCache.setCacheMap("job_bill_q_m_config", map);

        Map<String, List<String>> mapCase = new HashMap<>();

        List<String> arrayCase = new ArrayList<>();
        arrayCase.add("qianming1");
        arrayCase.add("jsjdr");
        arrayCase.add("bmjhr");
        arrayCase.add("yjqm6");
        arrayCase.add("yjqm7");
        mapCase.put("2", arrayCase);

        redisCache.setCacheMap("job_bill_q_m_config_case", mapCase);

        return AjaxResult.success();
    }

}

